iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 20
1
Modern Web

30天成為Laravel萌新系列 第 20

30天成爲Laravel萌新(第19天) - Model的基本操作

  • 分享至 

  • xImage
  •  

ORM是物件關聯對映(Object Relational Mapping)。在Larvel裡提供的 Eloquent ORM能讓開發者以一個簡單、美觀的方式操作關聯式資料庫。今天就來寫一點點基本的操作,更多可以查看文件,以及Laravel資料庫相關文件

Select All

在SQL,可能會用SELECT * FROM <TABLE>;來取得所有資料,儘管在資料量龐大時,這樣操作並不好,但是Laravel同樣有對應的操作:

use \App\BlogPost

$posts = App\BlogPost::all();

foreach ($posts as $post) {
    echo $post->title;
}

條件查詢Where

條件查詢也非常長使用到:

$post = App\BlogPost::where('id', 1)->get();
               // ->orderBy('name', 'desc') // 還可以加以設定以下參數
               // ->take(10)
               // ->get();

where自然很容易從SQL轉換了解。不過,Laravel有更簡單的方式針對主鍵做查詢:

$post = App\BlogPost::find(1);

// 等同於

$post = App\BlogPost::where('active', 1)->first();

插入資料(Insert Into)

對於INSERT INTO <TABLE> Values(...),Laravel可以先在記憶體建立模型資料,再使用save()儲存插入資料庫:

$post = new BlogPost;

$post->title = "Default Title";
$post->content = "Example Content";

$post->save();

更新資料(Update/SET/Where)

要更新資料?在查詢資料、修改以後,同樣可以使用save()更新資料:

$post = App\BlogPost::find(1);

$post->title = "New Title";
$post->content = "New Example Content";

$post->save();

不過使用update()在語意上會更明確:

$post = App\BlogPost::find(1);

$post->title = "New Title";
$post->content = "New Example Content";

$post->update();

Update也可以直接用於更新特定欄位

App\Flight::where('active', 1)
   ->where('destination', 'San Diego')
   ->update(['delayed' => 1]);

刪除資料(Delete)

要刪除也不是難事:

$post = App\BlogPost::find(1);

$post->delete();

還可以更簡單點透過主鍵刪除:

App\BlogPost::destroy(1);

Laravel 的 Eloquent ORM還可以做的更多事情。像是對於資料表的關係,還可以先用hasOnehasManybelongsTobelongsToMany來建立關係,在之後簡化使用。

更多詳細的內容,可以參考Laravel文件中,關於資料庫的章節,以及,物件關聯對映的章節。


上一篇
30天成爲Laravel萌新(第18天) - 建立Model
下一篇
30天成爲Laravel萌新(第20天) - 資源控制器(Resource Controller) 上篇
系列文
30天成為Laravel萌新32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言